package model;

import java.util.List;

import model.auxillary.ParameterCollection;

/**
 * The interface {@code ICalculatable} is for every process class that can be
 * calculated in some way.
 * @author Oliver Eckstein
 *
 */
public interface ICalculatableProcess extends IObservable {

	/**
     * Whether all parameters that have to be set by the user are set or not.
     * @return <b>true</b> when all parameters are set.
     */
    public boolean allSet();
    
    /**
	 * To check whether this model was calculated or not.
	 * @return returns {@code true} when model was calculated.
	 */
	public boolean isCalculated();
	
    /**
     * To start the calculation.     
     */    
    public void calculate();
    
    /**
     * To get the results of the calculation.
     * @return the results.
     */
    public List<ParameterCollection> getResults();
    
    /**
     * To find out if the calculation was aborted.
     * @return {@code true} when calculation was aborted, {@code false}
     * otherwise.
     */
    public boolean aborted();
    
    /**
     * To find out whether the last calculation caused errors.
     * @return {@code true} when calculation caused errors, {@code false}
     * otherwise.
     */
    public boolean getError();
}
